package com.demon.androidbasic

import android.app.Activity
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.util.Log


object DisplayUtil {
    val TAG = "DisplayUtil"
    /**
     * 保持字体大小不随系统设置变化（用在界面加载之前）
     * 要重写Activity的attachBaseContext()
     */
    fun attachBaseContext(context: Context, fontScale: Float): Context {
        val config: Configuration = context.getResources().getConfiguration()
        Log.i(TAG, "changeActivityFontScaleA " + config.fontScale.toString() + ", " + fontScale)
        //错误写法
//        if(config.fontScale != fontScale) {
//            config.fontScale = fontScale;
//            return context.createConfigurationContext(config);
//        } else {
//            return context;
//        }
        //正确写法
        config.fontScale = fontScale
        return context.createConfigurationContext(config)
    }

    /**
     * 保持字体大小不随系统设置变化（用在界面加载之前）
     * 要重写Activity的getResources()
     */
    fun getResources(context: Context, resources: Resources, fontScale: Float): Resources {
        val config: Configuration = resources.getConfiguration()
        Log.i(TAG, "changeActivityFontScaleR " + config.fontScale.toString() + ", " + fontScale)
        return if (config.fontScale !== fontScale) {
            config.fontScale = fontScale
            context.createConfigurationContext(config).getResources()
        } else {
            resources
        }
    }

    /**
     * 保存字体大小，后通知界面重建，它会触发attachBaseContext，来改变字号
     */
    fun recreate(activity: Activity) {
//          activity.getWindow().getDecorView().requestLayout();
//          activity.getWindow().getDecorView().invalidate();
        //只有这句才有效，其它两句都无效
        activity.recreate()
    }

//    /**
//     * 保存字体大小，后通知界面重建，它会触发attachBaseContext，来改变字号
//     */
//    fun recreate(activity: Activity) {
////          activity.getWindow().getDecorView().requestLayout();
////          activity.getWindow().getDecorView().invalidate();
//        //只有这句才有效，其它两句都无效
//        activity.recreate()
//    }
}

